package thread;

import jdk.management.resource.internal.inst.ThreadRMHooks;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池是线程管理机制,它主要解决两个问题：
 * 1：控制线程数量
 * 2：重用线程
 * 频繁地创建与销毁线程会给系统带来不必要的工作开销，降低并发性能，因此不应当让线程的生命周期与其执行的任务
 * 一致 ，而是执行任务后可以继续执行其他任务
 *
 * 控制线程数量可以有效的控制资源开销(每个线程都需要占用一部分内存),并且可以避免CPU的过度切换
 * 出现并发性能低下的问题.
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建线程池,这里创建的是一个固定大小的线程池,容量为2
        ExecutorService threadPool = Executors.newFixedThreadPool(2);
        for (int i = 0; i < 5; i++) {
            Runnable r = new Runnable() { //线程任务
                @Override
                public void run() {
                    Thread t = Thread.currentThread();
                    System.out.println(t.getName()+":正在执行任务....");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                    }
                }
            };
            /*
                //run()相当于要走五次，只new了连个Thread()来处理这五个run(),
                //线程池就交替让这两线程来执行这5个run()
             */
            threadPool.execute(r);
            System.out.println("将一个线程任务交给了线程池");

        }
        //threadPool.shutdown();
        threadPool.shutdownNow();
        System.out.println("线程池停止了！");
    }
}
